"""
工具函数和助手函数
"""
from werkzeug.security import generate_password_hash
from app.extensions import db
from app.models import User, Role, Menu


def create_admin_user():
    """创建默认管理员用户"""
    admin_role = Role.query.filter_by(name='admin').first()
    if not admin_role:
        admin_role = Role(name='admin', description='系统管理员')
        db.session.add(admin_role)
        db.session.commit()
    
    admin_user = User.query.filter_by(username='admin').first()
    if not admin_user:
        admin_user = User(
            username='admin',
            email='admin@example.com',
            role_id=admin_role.id
        )
        admin_user.set_password('admin123')
        db.session.add(admin_user)
        db.session.commit()


def create_default_menus():
    """创建默认菜单"""
    admin_role = Role.query.filter_by(name='admin').first()
    
    # 清理旧菜单数据
    if admin_role:
        admin_role.menus.clear()
    Menu.query.delete()
    db.session.commit()
    
    # 一级菜单数据
    main_menus = [
        {'name': '仪表盘', 'path': '/dashboard', 'icon': 'Monitor', 'sort_order': 0},
        {'name': '系统管理', 'path': '/system', 'icon': 'Setting', 'sort_order': 1},
        {'name': '天眼管理', 'path': '/skyeye', 'icon': 'View', 'sort_order': 2},
        {'name': '天眼数据', 'path': '/skyeyedata', 'icon': 'View', 'sort_order': 3},
    ]
    
    # 创建一级菜单
    created_menus = {}
    for menu_data in main_menus:
        menu = Menu(**menu_data)
        db.session.add(menu)
        db.session.flush()  # 先flush获取menu.id
        if admin_role:
            admin_role.menus.append(menu)
        created_menus[menu_data['name']] = menu
    
    # 二级菜单数据
    sub_menus = [
        # 系统管理子菜单
        {'name': '用户管理', 'path': '/system/User', 'icon': 'User', 'parent_name': '系统管理', 'sort_order': 1},
        {'name': '角色管理', 'path': '/system/Role', 'icon': 'UserFilled', 'parent_name': '系统管理', 'sort_order': 2},
        {'name': '菜单管理', 'path': '/system/Menu', 'icon': 'Menu', 'parent_name': '系统管理', 'sort_order': 3},
        {'name': '系统配置', 'path': '/system/Config', 'icon': 'Tools', 'parent_name': '系统管理', 'sort_order': 4},
        
        # 天眼管理子菜单
        {'name': '变量管理', 'path': '/skyeye/variable', 'icon': 'Operation', 'parent_name': '天眼管理', 'sort_order': 1},
        {'name': 'IP配置', 'path': '/skyeye/IpConfig', 'icon': 'Connection', 'parent_name': '天眼管理', 'sort_order': 2},
        {'name': '产品列表', 'path': '/skyeye/ProductList', 'icon': 'Goods', 'parent_name': '天眼管理', 'sort_order': 3},
        
        # 天眼数据子菜单
        {'name': '分档明细', 'path': '/skyeyedata/SegmentDetail', 'icon': 'DataLine', 'parent_name': '天眼数据', 'sort_order': 1},
    ]
    
    # 创建二级菜单
    for sub_menu_data in sub_menus:
        parent_name = sub_menu_data.pop('parent_name')
        parent_menu = created_menus.get(parent_name)
        
        if parent_menu:
            sub_menu_data['parent_id'] = parent_menu.id
            sub_menu = Menu(**sub_menu_data)
            db.session.add(sub_menu)
            db.session.flush()
            if admin_role:
                admin_role.menus.append(sub_menu)
    
    db.session.commit()


def init_database():
    """初始化数据库"""
    db.create_all()
    create_admin_user()
    create_default_menus()